Hauptseite Zu yanwittmann.de

Zur Hauptseite

<     4. Wiederholungsanweisungen     >

Software >> Java & OOP


Sagen wir, wir wollen die Zahlen von 0 bis 10 in der Konsole ausgeben. Mit diesem (Java) Code wäre dies möglich:

System.out.println(0);     
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
System.out.println(7);
System.out.println(8);
System.out.println(9);
System.out.println(10);     
Java

Aber das wäre enorm unpraktisch, vor allem, wenn man das für 100 Zeilen machen müsste. Es muss einen schnelleren Weg geben.
Darum gibt es sogenannte Wiederholungsanweisungen, die einen gewissen Code eine gewisse Anzahl an Malen ausführen können.


Kopfgesteuerte Schleife (while)

while führt den Code, der innerhalb der { } geschweiften Klammern steht, so lange aus, bis die in den ( ) normalen Klammern hinter dem while stehende Bedingung nicht mehr true ist. Hierbei wird die Bedingung schon vor dem ersten Betreten geprüft, das heißt, sie wird gar nicht erst betreten, wenn die Bedingung false ist.

int x = 0;     
int max = 5;     
while (x < max) {     
    System.out.println(x);     
    x = x + 1;
}
Java

In dem Beispiel hier direkt darüber würden die Zahlen von 0 bis 4 ausgegeben werden.
Zu Beginn hat x den Wert 0. Nun treffen wir auf die Schleife: Die Bedingung wird überprüft: x < max, also in diesem Fall 0 < 5, was true zurückgibt. Das heißt, die Schleife wird betreten: x wird in die Konsole ausgegeben (System.out.println(x)) und um 1 erhöht: x = x + 1;
Nun treffen wir auf das Schleifenende und überprüfen erneut die Schleifenbedingung: ist x noch immer kleiner als max? In diesem Fall noch immer ja: 1 < 5, also wird die Schleife erneut durchlaufen.
Dies wird so lange wiederholt, bis die Bedingung nicht mehr true, sondern false ist. In unserem Beispiel wäre dies bei x = 5 der Fall: 5 < 5 ist false. Damit wird die Schleife verlassen und der Code danach wird ausgeführt.


Fußgesteuerte Schleife (do while)

do while funktioniert so ähnlich wie while, mit dem Unterschied, dass die Bedingung nicht schon beim ersten Betreten der Schleife, sondern nur die ganzen Male danach überprüft wird.
Ein Beispiel, das den unterschied zur normalen while Schleife zeigt:

int x = 0;     
int max = 5;     
do {
    System.out.println(x);     
    x = x + 1;
} while (x < max && x != 0);     
Java

Auch hier werden die Zahlen von 0 bis 4 ausgegeben. Die Bedingung in der Klammer (x < max && x != 0) sagt zwar aus, dass x nicht 0 sein darf, was es ja beim Betreten der Schleife ist, aber die Bedingung wird ja nicht beim Betreten, sondern erst nach der ersten Ausführung geprüft. Damit wurde x schon um 1 erhöht, wenn man bei der Bedingung ankommt und x != 0 ist true. x < max ist genau wie bei dem anderen Beispiel so lange true wie x noch kleiner als 5 ist.


Zählschleife (for)

Diese Schleifenart ist diejenige, die man in der Realität am Häufigsten verwendet. Sie führt die angegebenen Anweisungen eine gewisse Anzahl an malen aus.

for (int i = 0; i < 5; i++) {     
    System.out.println(i);
}
Java

Auch dieses Beispiel würde die Zahlen von 0 bis 4 ausgeben.
Die for-Schleife hat in der Klammer drei Parameter, die je von einem ; getrennt werden.
Der Erste wird vor der ersten Ausführung ausgeführt, hier initialisiert er eine Variable i mit dem Wert 0.
Der Zweite ist die Bedingung, die, wie bei while, vor jedem Schleifendurchlauf geprüft wird. Sollte hier also i größer oder gleich 5 sein, wird die Schleife abgebrochen.
Der Dritte wird nach jedem Schleifendurchlauf ausgeführt, das heißt, i wird jedes mal, wenn das Ende der Schleife erreicht wird, um 1 erhöht.
Also: Beim Betreten wird i auf 0 gesetzt und i < 5 (0 < 5 = true) wird überprüft. Der Schleifeninhalt wird ausgeführt. i wird um 1 erhöht (i++), die Bedingung i < 5 (1 < 5 = true) wird überprüft und der Schleifeninhalt wird ausgeführt. Dies wird so lange wiederholt, bis die Bedingung false ist.

Mit for lässt sich z.B. ein Array (also ein Feld) sehr einfach durchlaufen:

int[] foo = new int[]{0, 10, 2, 36, 96};     
for (int i = 0; i < foo.length; i++) {
    System.out.println(i);
}
Java

Damit z.B. wird jeder Eintrag in dem Array ausgegeben.


Es gibt zwar noch mehr, mächtigere Schleifenarten (wie for each oder Iterators) aber diese sind hier nicht relevant.


Aufgaben

    Frage 1
Was ist der Unterschied von while und do while?

    Frage 2
Was sind die drei Parameter der for-Schleife?

    Frage 3
Erstelle von jeder Art eine Schleife, die die Zahlen von 2 bis 6 ausgibt (versuche kreativ zu sein!)

    Frage 4
Schreibe eine for Schleife, die das Beispiel ganz am Anfang ersetzen würde (die ganzen System.outs)

    Frage 5
Schreibe eine for Schleife, die jeden Wert eines integer arrays werte um 1 erhöht und dann ausgibt